<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>扩展方法</title>
</head>
<body>
    
</body>
</html>
<script>
    //扩展方法
    //查看班级中同学的JS成绩是否都及格
    // const users = [
    //     {name:"李四",js:89},
    //     {name:"马六",js:55},
    //     {name:"张三",js:78}
    // ];
    // // const result = users.every((user) => {
    // //     return user.js >= 60;
    // // });
    // const result = users.every(user => user.js >= 60);
    // console.log(result);


    //标题的关键字检查
    // let words = ['后盾','北京','培训'];
    // let title = '后盾人在北京不断分享技术教程做训';
    // //必须全部返回true   否则的话就不会继续遍历了
    // let state = words.every(function(item,index,array){
    //     return title.indexOf(item) >= 0;
    // });
    // if(state == false){
    //     console.log('标题必须包含所有关键字');
    // }


    //使用some  递归检测   只要有一个符合就返回真
    // let words = ['后盾','北京','武汉'];
    // let title = '后是盾人不断分享技术教程';

    // let state = words.some(function(item,index,array){
    //     return title.indexOf(item) >= 0;
    // });

    // if(state == true){
    //     console.log('标题含有违规的关键字')
    // }


    //filter过滤
    // let lessions = [
    //     {title:'媒体查询响应式布局',category:'css'},
    //     {title:'FLEX弹窗盒子模型',category:'css'},
    //     {title:'MYSQL多表查询随意操作',category:'mysql'}
    // ];

    // let newArray = lessions.filter(function(item,index,array){
    //     return item.category == 'css';
    // });
    // console.log(newArray)


    //编写一个过滤函数加深技术
    // function except(array,excepts){
    //     const newArray = [];
    //     for(const elem of array){
    //         if(!excepts.includes(elem)){
    //             newArray.push(elem);
    //         }
    //     }
    //     return newArray;
    // }

    // const array = [1,2,3,4];
    // console.log(except(array,[2,3]))


    // function except(array,callback){
    //     const newArray = [];
    //     for(const item of array){
    //         if(callback(item) == true){
    //             newArray.push(item);
    //         }
    //     }
    //     return newArray;
    // }

    // const array = [1,2,3,4];
    // console.log(except(array,function(item){
    //     return item > 2;
    // }));


    //自己编写一个过滤函数
    // function filters(array,callback){
    //     const newArr = [];
    //     for(const item of array.values()){
    //         if(callback(item) == true){
    //             newArr.push(item);
    //         }
    //     }
    //     return newArr;
    // }

    // const arr = [1,2,3,4];
    // console.log(filters(arr,function(item){
    //     return item > 2;
    // }));


      //map 
    // let lession= [
    //     {title:'媒体响应式布局',category:'css'},
    //     {title:'FLEX弹性盒子模型',category:'css'},
    //     {title:'MYSQL多表查询随意操作',category:'mysql'}
    // ];
    // // console.log(lession.map(item=>item.title));

    // //给所有的标题加上后盾人
    // lessions = lession.map(function(item,index,array){
    //     item.title = `后盾人-${item.title}`;
    //     return item;
    // });
    // console.log(lessions)

    //统计元素出现的次数
    //如果第二个参数存在，就把第二个参数当做初始值，否则就将数组的第一个元素当做初始值
    //第一种方式
    // function countArrayElem(array,elem){
    //     return array.reduce((total,cur) => {
    //         return total += cur == elem ? 1 : 0;
    //     },0)
    // }

    //第二种方式
//     function countArrayElem(array,elem){
//        return array.reduce((total,cur) =>  (total += cur == elem ? 1 : 0),0);
//     }

//     let numbers = [1,2,3,1,5];
//    console.log(countArrayElem(numbers,5));

    //获取数组中的最大值
    // function arrayMax(array){
    //     return array.reduce(
    //         (max,elem) => (max > elem ? max : elem),array[0]
    //     );
    // }


    // //获取数组中的最小值
    // function arrayMin(array){
    //     return array.reduce(
    //         (min,elem) => (min < elem ? min : elem),array[0]
    //     );
    // }

    // console.log(arrayMax([1,3,4,7]));
    // console.log(arrayMin([1,3,4,7]))

    
 

   
</script>
